#include "threadPool.h"

//主线程处理短命令
void processShortCommand(int netfd, CommandType_e cmd, char *data) {
	filePath_t file_path;
    
		//1.创建一个database数据结构
	MYSQL* mysql = NULL;
	dataBase_t dataBase;
	snprintf(dataBase.host,sizeof(dataBase.host),"localhost");
	snprintf(dataBase.user,sizeof(dataBase.user),"root");
	snprintf(dataBase.passwd,sizeof(dataBase.passwd),"123");
	snprintf(dataBase.db,sizeof(dataBase.db),"deepsleep");
	initDatabase(&mysql,dataBase);
	printf("数据库连接成功！\n");


	//2.检查变量
	printf("我还是主线程，将执行短命令\n"); 
	printf("I am main! I got netfd = %d,cmd = %d,data = %s\n", netfd,cmd,data);
	fileList_t file_list;
	ResponseResults_e response_res;
	char *return_data = (char*)calloc(4096 , sizeof(char));
	int ret;
	//3.判断短命令类型，并调用相应函数，返回给客户端
	switch(cmd) {
		case CMD_REGISTER_APPLY:         //注册请求
			printf("收到用户的注册请求了\n");
			handle_register_request_command(netfd);
			break;
		case CMD_REGISTER:               // 注册
			//用户名，盐值和密码，分开，然后
			//存入数据库
			printf("收到注册\n");
			handle_register_command(netfd, mysql, data);
			
			break;
		case CMD_LOGIN_APPLY:      //登录请求
			handle_login_request_command(netfd, mysql, data);
			break;			

		case CMD_LOGIN:          //登录
			handle_login_command(netfd, mysql, data,&file_path.current_user_id);
			file_path.current_file_id = getUserRootDirId(mysql,file_path.current_user_id);
			printf("登录成功，给用户展示目录\n");
			ret = lsCommand(&file_path,mysql,&file_list);
								//todo  用某种方法生成token，发送给客户端，
			printf("ret = %d\n",ret);
			// lsReturnData(file_list,return_data);
			// printf("return data = %s\n",return_data);
			if(ret == 0) {
				response_res = SUCESS;
			}else {
				response_res = FAIL;
			}
			// sendCommand(netfd,CMD_LS,response_res,return_data,strlen(return_data));
			break;			

		case CMD_LS:       // 列出文件             如果有token就无需登录，直接根据token找到用户名，列出文件，如果没有，就提醒他先登录
			//接收请求，无参数
			//调用函数，返回结构体，处理后得到一个字符串
			// 发送给客户端
			//ret = lsCommand(&file_path,mysql,&file_list);
			ret = lsCommand(&file_path,mysql,&file_list);
			if(ret == 0) {
				response_res = SUCESS;
			}else {
				response_res = FAIL;
			}
			// 处理字符串函数
			lsReturnData(file_list,&return_data);
			printf("%s\n",return_data);

			sendCommand(netfd,CMD_LS,response_res,return_data,strlen(return_data));
			break;
		case CMD_CD:       // 改变目录
			//接收请求，有一个参数data，代表要切入的目录
			//调函数，改变虚拟路径
			//发送成功或失败
			ret = cdCommand(&file_path,mysql,data);
			if(ret == 0) {
				response_res = SUCESS;
			}else {
				response_res = FAIL;
			}
			sendCommand(netfd,CMD_CD,response_res,NULL,0);
			break;
		case CMD_PWD:      // 显示当前目录
			//接收请求，无参数
			//调函数，返回字符串
			//发送字符串
			data = "pwd";
			ret = pwdCommand(&file_path,mysql,&return_data);
			if(ret == 0) {
				response_res = SUCESS;
			}else {
				response_res = FAIL;
			}

			sendCommand(netfd,CMD_PWD,response_res,return_data,strlen(return_data));
			break;
		case CMD_RMOVE:    // 删除文件
			//接收请求，有一个参数data，代表要删除的文件
			//调函数，改变虚拟路径
			//发送成功或失败			
			ret = removeCommand(&file_path,mysql,data);
			if(ret == 0) {
				response_res = SUCESS;
			}else {
				response_res = FAIL;
			}
			sendCommand(netfd,CMD_RMOVE,response_res,NULL,0);
			break;
		case CMD_MKDIR:    // 创建目录
			//接收请求，有一个参数data，代表要创建的目录
			//调函数，改变虚拟路径
			//发送成功或失败
			ret = mkdirCommand(&file_path,mysql,data);
			if(ret == 0) {
				response_res = SUCESS;
			}else {
				response_res = FAIL;
			}
			sendCommand(netfd,CMD_MKDIR,response_res,NULL,0);
			break;
		case CMD_RMDIR:    // 删除目录
			//接收请求，有一个参数data，代表要删除的目录
			//调函数，改变虚拟路径
			//发送成功或失败
			ret = rmdirCommand(&file_path,mysql,data);
			if(ret == 0) {
				response_res = SUCESS;
			}else {
				response_res = FAIL;
			}
			sendCommand(netfd,CMD_RMDIR,response_res,NULL,0);
			break;
		default:

			break;
		close(netfd);

	}

}